package io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 文件复制(块读写)
 * 会有脏数据
 */
public class CopyDemo2 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis =new FileInputStream("kobe.jpg");
        FileOutputStream fos =new FileOutputStream("kobe_cp2.jpg");

        long start =System.currentTimeMillis();
        byte[] data =new byte[1024*10];//10kb
        int len;
        while ((len=fis.read(data))!= -1){//len表示的是真实读出来的字节数
            //fos.write(data);//写入整个data，最后一次写入时可以会有脏数据
            fos.write(data,0,len);//从data的0开始写入len个字节，读多少写多少，没有脏数据了
            //每次循环：用 fis.read(data) 读数据到 data，并拿到实际读了多少字节（len）。
            //写入时：通过 fos.write(data, 0, len)，只把 data 里前 len 个有效字节写入输出流。
            //优势：无论文件多大、最后一次读是否填满数组，都能精准复制，避免 “脏数据”，保证文件复制的正确性。
        }
        long end =System.currentTimeMillis();
        System.out.println("复制完毕,耗时:"+(end-start)+"ms");
        fis.close();
        fos.close();

    }
}
